package 简单;

/*
*  题目地址：https://leetcode-cn.com/problems/intersection-of-two-arrays/
*
* 给定两个数组，编写一个函数来计算它们的交集。
*
* 实例1
* 输入：nums1 = [1,2,2,1], nums2 = [2,2]
* 输出：[2]
*
* 说明：
* 输出结果中的每个元素一定是唯一的。
* 我们可以不考虑输出结果的顺序。
*
*  思路：
*  将两个数组分别加入到两个Set 去重复，去两个set的交集
*  偷懒写法：可以使用 list.retainAll(
*
* */

import java.util.*;

public class demo349 {

    public static void main(String[] args) {

//        int[] a =  {4,9,5};
        int[] a =  {4,7,9,7,6,7};
//        int[] b = {9,4,9,8,4};
        int[] b = {5,0,0,6,1,6,2,2,4};

        System.out.println(Arrays.toString(intersection(a,b)));


    }

    public static int[] intersection(int[] nums1, int[] nums2) {

        HashSet<Integer> set1 = new HashSet<Integer>();
        HashSet<Integer> set2 = new HashSet<Integer>();
        HashSet<Integer> set3 = null;



        for (int i=0;i<nums1.length;i++){
            set1.add(nums1[i]);
        }

        for (int i=0;i<nums2.length;i++){
            set2.add(nums2[i]);
        }

        if (set1.size() < set2.size())
        {
            set3 = set1;
            set1 = set2;
            set2 = set3;
        }

        Iterator<Integer> iterator = set2.iterator();

        ArrayList<Integer> list = new ArrayList<Integer>();

        while (iterator.hasNext()){

            int t = iterator.next();

            if(!set1.add(t))
                list.add(t);

        }

        int[] ts = new int[list.size()];

        Iterator<Integer> iterator2 = list.iterator();
        int con = 0;

        while (iterator2.hasNext())
        {
            ts[con++] = iterator2.next();
        }


        return ts;
    }
}
